/**
 * 数据库操作模块
 * 基于node-mysql库封装
 * 自动加载配置文件、创建连接池
 */

'use strict';

let nconf=require('nconf')

let mysql=require('mysql')

let log4js = require('./logger');

let logger=log4js.logger();

let path=require('path');

const tools=require("./tools.js");

const configPath=path.resolve(__dirname,'../../config/config.json');

/**
 * 加载公共配置文件，应该包含以下信息：
 * -database
 */
nconf.file('config',{
    file:configPath
})


/**
 * 创建连接池
 * @type {Pool}
 */
let pool  = mysql.createPool(nconf.get('database'));


let me={

    /**
     * SQL查询字符串 方法
     *
     * 详情查看node-mysql官方文档
     *
     * 推荐使用参数格式：
     *
     * 1、查询时推荐使用的格式
     * [sql{String},params{Array}]
     * 如：
     * connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {});
     *
     * 2、update、insert推荐使用格式
     * [sql{String},params{Object}]
     * 如：
     * var post  = {id: 1, title: 'Hello MySQL'};
     * connection.query('INSERT INTO posts SET ?', post, function(err, result) {})
     *
     * 3、需要配置高级查询的时候使用的格式
     * [params{Object}:sql,timeout,values]
     *
     * @param params
     * @returns {Promise}
     */
    query(...params){
        return new Promise((resolve)=>{
            let _query=pool.query(...params,(error, results, fields)=> {
                if(error){
                    logger.error('SQL: [%s] run error:%o', _query.sql,error);
                    resolve(tools.sqlError(error));
                }else{
                    logger.debug('SQL: [%s] run success', _query.sql);
                    if(results.length>0){
                        resolve(tools.success(results));
                    }else{
                        resolve(tools.success("success"));
                    }
                }
            });
        })
    }
}

module.exports=me;